package com.shenma2009.logs;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Layout;
import ch.qos.logback.core.UnsynchronizedAppenderBase;

/**
 * @author 军哥
 * @version 1.0
 * @description: ShenmaLogAppender
 * @date 2023/6/1 14:42
 */

public class ShenmaLogAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {

    Layout<ILoggingEvent> layout;

    //自定义配置
    String printString;

    @Override
    public void start() {
        /**
         * 这里可以做些初始化判断 比如layout不能为null
         */
        if(layout == null) {
            addWarn("Layout was not defined");
        }
        /**
         * 或者写入数据库 或者redis时 初始化连接等等
         */

        super.start();
    }

    @Override
    public void stop() {
        /**
         * 释放相关资源，如数据库连接，redis线程池等等
         */
        System.out.println("logback-stop方法被调用");
        if(!isStarted()) {
            return;
        }

        super.stop();
    }

    @Override
    protected void append(ILoggingEvent iLoggingEvent) {
        if (iLoggingEvent == null || !isStarted()){
            return;
        }

        /**
         * 自定义日志输出的逻辑
         * 比如 操作数据库  redis kafka
         * 当然，我的本质目的是发钉钉消息
         */
        System.out.print("获取输出值"+iLoggingEvent.getFormattedMessage());
        System.out.println("格式化输出日志："+printString + "：" + layout.doLayout(iLoggingEvent));
        System.out.println("==============================================  MyLogbackAppender要发消息了");
    }
}
